IAR3.11.1 搭建 STM8S003 模板工程

您所在的位置:网站首页 1260 v311芯片 IAR3.11.1 搭建 STM8S003 模板工程

IAR3.11.1 搭建 STM8S003 模板工程

2024-07-16 13:36:20| 来源: 网络整理| 查看: 265

前言

头一次搭建STM8的工程,中间有一些错误,记录一下。

实验工程

可以在STM8S003板子上单步的没有业务逻辑的工程模板下载点: IAR3111_STM8S003_project_template.zip

实验

实验材料: IAR for STM8 3.11.1, 这个从买开发板的店主那要就行,人家都给。不过有的家是新版,有的家是旧版。

STM8固件库 en.stsw-stm8069.zip, 官方下载地址 STSW-STM8069(STM8S/A Standard peripheral library)

新建工作区

在这里插入图片描述

保存工作区

在这里插入图片描述

新建工程

在这里插入图片描述 在这里插入图片描述 确定后,IAR会让保存新工程,给出新工程名称,点击确定。 IAR帮助加入了main.c和main(), 尝试编译一下,是可以编译通过的。 在这里插入图片描述

加入STM8固件库

将 en.stsw-stm8069.zip 解压,将里面的 STM8S_StdPeriph_Lib\Libraries\STM8S_StdPeriph_Driver 目录拷贝到本工程中。 在这里插入图片描述

在工程中建立新分组 STM8S_StdPeriph_Driver

在这里插入图片描述 在弹出框中指定组名为 STM8S_StdPeriph_Driver,点击确定。 向组中加入本工程目录 STM8S_StdPeriph_Driver\inc 和 STM8S_StdPeriph_Driver\src 中的所有文件。 这样,STM8官方固件库就加入工程了。 在这里插入图片描述 加好STM8固件库后的样子 在这里插入图片描述 在这里插入图片描述 这时尝试编译一下,报错如下: 在这里插入图片描述 说找不到头文件,这时,要在IAR中设置头文件路径。

$PROJ_DIR$ $PROJ_DIR$\STM8S_StdPeriph_Driver\inc

在这里插入图片描述 这时,再尝试编译一下。报错如下: 在这里插入图片描述 报错提示说MCU没选

选MCU

MCU选择有2处: 在这里插入图片描述 在这里选完MCU, 还是会报错。 还需要添加宏来匹配ST官方库. 双击报错提示,会跳到ST官方库的报错提示处的代码,如下:

#if !defined (STM8S208) && !defined (STM8S207) && !defined (STM8S105) && \ !defined (STM8S103) && !defined (STM8S903) && !defined (STM8AF52Ax) && \ !defined (STM8AF62Ax) && !defined (STM8AF626x) && !defined (STM8S007) && \ !defined (STM8S003)&& !defined (STM8S005) && !defined(STM8S001) && !defined (STM8AF622x) #error "Please select first the target STM8S/A device used in your application (in stm8s.h file)" #endif

根据自己MCU型号,这里我要向IAR环境中加入宏 STM8S003 在这里插入图片描述 这时尝试编译,报错如下: 在这里插入图片描述 报错提示说,没找到stm8s_conf.h, 这个文件并不在我们拷贝过来的STM8S_StdPeriph_Driver中,用everything在官方库中找stm8s_conf.h, 有很多。在ST官方模板下有这个文件,拷贝并新增到本工程根目录下。 在这里插入图片描述 在官方库模板下,还能看到stm8s_it.c, stm8s_it.h, 这时中断处理的实现。也拷贝过来。 这样从官方模板下拷贝3个文件(stm8s_conf.h, stm8s_it.h, stm8s_it.c)到工程根目录,并加入工程. 尝试编译一下,报错如下: 在这里插入图片描述 对照所选MCU的资源就能知道,报错的地方都是STM8S003没有的资源。 当MCU选定后,在STM8A/S固件库中能使用的资源就是确定的了。 这时将报错的资源对应的文件排除在编译之外就可以。一个一个的排除,直到没有此类报错。 排除文件参与编译的方法如下: 在这里插入图片描述 在这里插入图片描述

包含在工程中,但是被排除在编译之外的文件图标变灰了,如下: 在这里插入图片描述 这时,尝试编译工程,还会提示有硬件资源不存在的文件,用上述方法,将这些文件都排除在编译之外。

将不存在的设备对应的实现都排除后,程序编译过了,有1个警告在STM8S固件库中。 这个不是错误,是IAR的bug. 在这里插入图片描述 现在都编译过了,去设置一下仿真器,仿真器只能设定为ST LINK. 在这里插入图片描述 将程序优化去掉,好调试程序。 在这里插入图片描述 将输出文件改为每次都覆盖,可以保证每次编译后,输出文件都是新的。 在这里插入图片描述 将main函数改改,准备实验单步是否好使。

#include "stm8s.h" int main( void ) { int i = 0; do { i++; } while (1); // return 0; }

这时,可以连上自己的开发板(要保证STLINK和自己板子的SWIM4线接口没连错,用STVP可以烧录程序),然后再用IAR看看能否在自己选的MCU上单步程序。

STLINK的SWIM连接4线管脚如下: 在这里插入图片描述

前面选STLINK仿真器时,IAR模式就是调试开始后,中断在main函数,所以不用自己预先下断点。 在这里插入图片描述 在这里插入图片描述 将变量i加入watch, 如果能单步,就可以看到i在一动一变。 在这里插入图片描述 单步一下,看到i果真在随着i++在变。 在这里插入图片描述 IAR 3.11.1 + STM8S003 工程模板搭建的实验做完了。

后续的活就简单了,纯软件的任务, 照着STM8A/S固件库的单个知识点的例程,迁移到自己工程,来实现自己板子的功能。

备注

用的是和谐板的标准板授权,IAR在载入工程后,会自动弹出要解压IAR库的源代码的对话框,解压因为没有License, 会解压失败,挺唬人的。

当IAR弹出提示框,要解压IAR库的源码时,选择否,勾选不再提示,以后就不会在载入工程后,有提示框出现。

做点和板子相关的验证实验

刚才写工作日志给领导时,想起来,还是要整点和板子相关的内容,领导不懂技术,要让他看到工作成果,板子上有个红色的指示灯,从STM8A/S固件库例程中,将GPIO例程迁移过来,那个指示灯可以一亮一灭的,拍了个视频,放在日志后面给领导秀了一下进度。

ST固件库做的真是优秀,不同MCU固件库软件编程都差不多,只看代码,不容易搞清,到底在操作哪种MCU.

#include "stm8s.h" // 指示灯 PD3 #define LED_GPIO_PORT (GPIOD) #define LED_GPIO_PIN (GPIO_PIN_3) void Delay(uint16_t nCount); int main( void ) { int i = 0; // pin的初始状态 // GPIO_MODE_OUT_PP_LOW_SLOW // GPIO_MODE_OUT_OD_HIZ_SLOW // 等初始状态为灭 GPIO_Init(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PIN, GPIO_MODE_OUT_OD_HIZ_SLOW); do { i++; /* Toggles LEDs */ // 翻转灯状态 // GPIO_WriteReverse(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PIN); // 点灯 GPIO_WriteLow(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PIN); Delay(0xFFFF); // 不精确延时 // 灭灯 GPIO_WriteHigh(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PIN); Delay(0xFFFF); // 不精确延时 } while (1); // return 0; } /** * @brief Delay * @param nCount * @retval None */ void Delay(uint16_t nCount) { /* Decrement nCount value */ while (nCount != 0) { nCount--; } } #ifdef USE_FULL_ASSERT /** * @brief Reports the name of the source file and the source line number * where the assert_param error has occurred. * @param file: pointer to the source file name * @param line: assert_param error line source number * @retval None */ void assert_failed(uint8_t* file, uint32_t line) { /* User can add his own implementation to report the file name and line number, ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ /* Infinite loop */ while (1) { } } #endif


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭